/*
* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "ov5640_cfg.h"
#include "ov5640_reg.h"

#define OMV_OV5640_PLL_CTRL2    (0x64)
#define OMV_OV5640_PLL_CTRL3    (0x13)
const uint8_t default_regs[][3] = {

// https://github.com/ArduCAM/Arduino/blob/master/ArduCAM/ov5640_regs.h

    { 0x47, 0x40, 0x20 },
    { 0x40, 0x50, 0x6e },
    { 0x40, 0x51, 0x8f },
    { 0x30, 0x08, 0x42 },
    { 0x31, 0x03, 0x03 },
    { 0x30, 0x17, 0xff }, // { 0x30, 0x17, 0x7f },
    { 0x30, 0x18, 0xff },
    { 0x30, 0x2c, 0x02 },
    { 0x31, 0x08, 0x01 },
    { 0x36, 0x30, 0x2e },
    { 0x36, 0x32, 0xe2 },
    { 0x36, 0x33, 0x23 },
    { 0x36, 0x21, 0xe0 },
    { 0x37, 0x04, 0xa0 },
    { 0x37, 0x03, 0x5a },
    { 0x37, 0x15, 0x78 },
    { 0x37, 0x17, 0x01 },
    { 0x37, 0x0b, 0x60 },
    { 0x37, 0x05, 0x1a },
    { 0x39, 0x05, 0x02 },
    { 0x39, 0x06, 0x10 },
    { 0x39, 0x01, 0x0a },
    { 0x37, 0x31, 0x12 },
    { 0x36, 0x00, 0x08 },
    { 0x36, 0x01, 0x33 },
    { 0x30, 0x2d, 0x60 },
    { 0x36, 0x20, 0x52 },
    { 0x37, 0x1b, 0x20 },
    { 0x47, 0x1c, 0x50 },
    { 0x3a, 0x18, 0x00 },
    { 0x3a, 0x19, 0xf8 },
    { 0x36, 0x35, 0x1c },
    { 0x36, 0x34, 0x40 },
    { 0x36, 0x22, 0x01 },
    { 0x3c, 0x04, 0x28 },
    { 0x3c, 0x05, 0x98 },
    { 0x3c, 0x06, 0x00 },
    { 0x3c, 0x07, 0x08 },
    { 0x3c, 0x08, 0x00 },
    { 0x3c, 0x09, 0x1c },
    { 0x3c, 0x0a, 0x9c },
    { 0x3c, 0x0b, 0x40 },
    { 0x38, 0x20, 0x47 }, // { 0x38, 0x20, 0x41 },
    { 0x38, 0x21, 0x01 },
    { 0x38, 0x00, 0x00 },
    { 0x38, 0x01, 0x00 },
    { 0x38, 0x02, 0x00 },
    { 0x38, 0x03, 0x04 },
    { 0x38, 0x04, 0x0a },
    { 0x38, 0x05, 0x3f },
    { 0x38, 0x06, 0x07 },
    { 0x38, 0x07, 0x9b },
    { 0x38, 0x08, 0x05 },
    { 0x38, 0x09, 0x00 },
    { 0x38, 0x0a, 0x03 },
    { 0x38, 0x0b, 0xc0 },
    { 0x38, 0x10, 0x00 },
    { 0x38, 0x11, 0x10 },
    { 0x38, 0x12, 0x00 },
    { 0x38, 0x13, 0x06 },
    { 0x38, 0x14, 0x31 },
    { 0x38, 0x15, 0x31 },
    { 0x30, 0x34, 0x1a },
    { 0x30, 0x35, 0x11 }, // { 0x30, 0x35, 0x21 },
    { 0x30, 0x36, OMV_OV5640_PLL_CTRL2 }, // { 0x30, 0x36, 0x46 },
    { 0x30, 0x37, OMV_OV5640_PLL_CTRL3 },
    { 0x30, 0x38, 0x00 },
    { 0x30, 0x39, 0x00 },
    { 0x38, 0x0c, 0x07 },
    { 0x38, 0x0d, 0x68 },
    { 0x38, 0x0e, 0x03 },
    { 0x38, 0x0f, 0xd8 },
    { 0x3c, 0x01, 0xb4 },
    { 0x3c, 0x00, 0x04 },
    { 0x3a, 0x08, 0x00 },
    { 0x3a, 0x09, 0x93 },
    { 0x3a, 0x0e, 0x06 },
    { 0x3a, 0x0a, 0x00 },
    { 0x3a, 0x0b, 0x7b },
    { 0x3a, 0x0d, 0x08 },
    { 0x3a, 0x00, 0x38 }, // { 0x3a, 0x00, 0x3c },
    { 0x3a, 0x02, 0x05 },
    { 0x3a, 0x03, 0xc4 },
    { 0x3a, 0x14, 0x05 },
    { 0x3a, 0x15, 0xc4 },
    { 0x36, 0x18, 0x00 },
    { 0x36, 0x12, 0x29 },
    { 0x37, 0x08, 0x64 },
    { 0x37, 0x09, 0x52 },
    { 0x37, 0x0c, 0x03 },
    { 0x40, 0x01, 0x02 },
    { 0x40, 0x04, 0x02 },
    { 0x30, 0x00, 0x00 },
    { 0x30, 0x02, 0x1c },
    { 0x30, 0x04, 0xff },
    { 0x30, 0x06, 0xc3 },
    { 0x30, 0x0e, 0x58 },
    { 0x30, 0x2e, 0x00 },
    { 0x43, 0x00, 0x30 },
    { 0x50, 0x1f, 0x00 },
    { 0x47, 0x13, 0x04 }, // { 0x47, 0x13, 0x03 },
    { 0x44, 0x07, 0x04 },
    { 0x46, 0x0b, 0x35 },
    { 0x46, 0x0c, 0x22 },
    { 0x38, 0x24, 0x02 }, // { 0x38, 0x24, 0x01 },
    { 0x50, 0x01, 0xa3 },
    { 0x34, 0x06, 0x01 },
    { 0x34, 0x00, 0x06 },
    { 0x34, 0x01, 0x80 },
    { 0x34, 0x02, 0x04 },
    { 0x34, 0x03, 0x00 },
    { 0x34, 0x04, 0x06 },
    { 0x34, 0x05, 0x00 },
    { 0x51, 0x80, 0xff },
    { 0x51, 0x81, 0xf2 },
    { 0x51, 0x82, 0x00 },
    { 0x51, 0x83, 0x14 },
    { 0x51, 0x84, 0x25 },
    { 0x51, 0x85, 0x24 },
    { 0x51, 0x86, 0x16 },
    { 0x51, 0x87, 0x16 },
    { 0x51, 0x88, 0x16 },
    { 0x51, 0x89, 0x62 },
    { 0x51, 0x8a, 0x62 },
    { 0x51, 0x8b, 0xf0 },
    { 0x51, 0x8c, 0xb2 },
    { 0x51, 0x8d, 0x50 },
    { 0x51, 0x8e, 0x30 },
    { 0x51, 0x8f, 0x30 },
    { 0x51, 0x90, 0x50 },
    { 0x51, 0x91, 0xf8 },
    { 0x51, 0x92, 0x04 },
    { 0x51, 0x93, 0x70 },
    { 0x51, 0x94, 0xf0 },
    { 0x51, 0x95, 0xf0 },
    { 0x51, 0x96, 0x03 },
    { 0x51, 0x97, 0x01 },
    { 0x51, 0x98, 0x04 },
    { 0x51, 0x99, 0x12 },
    { 0x51, 0x9a, 0x04 },
    { 0x51, 0x9b, 0x00 },
    { 0x51, 0x9c, 0x06 },
    { 0x51, 0x9d, 0x82 },
    { 0x51, 0x9e, 0x38 },
    { 0x53, 0x81, 0x1e },
    { 0x53, 0x82, 0x5b },
    { 0x53, 0x83, 0x14 },
    { 0x53, 0x84, 0x06 },
    { 0x53, 0x85, 0x82 },
    { 0x53, 0x86, 0x88 },
    { 0x53, 0x87, 0x7c },
    { 0x53, 0x88, 0x60 },
    { 0x53, 0x89, 0x1c },
    { 0x53, 0x8a, 0x01 },
    { 0x53, 0x8b, 0x98 },
    { 0x53, 0x00, 0x08 },
    { 0x53, 0x01, 0x30 },
    { 0x53, 0x02, 0x3f },
    { 0x53, 0x03, 0x10 },
    { 0x53, 0x04, 0x08 },
    { 0x53, 0x05, 0x30 },
    { 0x53, 0x06, 0x18 },
    { 0x53, 0x07, 0x28 },
    { 0x53, 0x09, 0x08 },
    { 0x53, 0x0a, 0x30 },
    { 0x53, 0x0b, 0x04 },
    { 0x53, 0x0c, 0x06 },
    { 0x54, 0x80, 0x01 },
    { 0x54, 0x81, 0x06 },
    { 0x54, 0x82, 0x12 },
    { 0x54, 0x83, 0x24 },
    { 0x54, 0x84, 0x4a },
    { 0x54, 0x85, 0x58 },
    { 0x54, 0x86, 0x65 },
    { 0x54, 0x87, 0x72 },
    { 0x54, 0x88, 0x7d },
    { 0x54, 0x89, 0x88 },
    { 0x54, 0x8a, 0x92 },
    { 0x54, 0x8b, 0xa3 },
    { 0x54, 0x8c, 0xb2 },
    { 0x54, 0x8d, 0xc8 },
    { 0x54, 0x8e, 0xdd },
    { 0x54, 0x8f, 0xf0 },
    { 0x54, 0x90, 0x15 },
    { 0x55, 0x80, 0x06 },
    { 0x55, 0x83, 0x40 },
    { 0x55, 0x84, 0x20 },
    { 0x55, 0x89, 0x10 },
    { 0x55, 0x8a, 0x00 },
    { 0x55, 0x8b, 0xf8 },
    { 0x50, 0x00, 0x27 }, // { 0x50, 0x00, 0xa7 },
    { 0x58, 0x00, 0x20 },
    { 0x58, 0x01, 0x19 },
    { 0x58, 0x02, 0x17 },
    { 0x58, 0x03, 0x16 },
    { 0x58, 0x04, 0x18 },
    { 0x58, 0x05, 0x21 },
    { 0x58, 0x06, 0x0F },
    { 0x58, 0x07, 0x0A },
    { 0x58, 0x08, 0x07 },
    { 0x58, 0x09, 0x07 },
    { 0x58, 0x0a, 0x0A },
    { 0x58, 0x0b, 0x0C },
    { 0x58, 0x0c, 0x0A },
    { 0x58, 0x0d, 0x03 },
    { 0x58, 0x0e, 0x01 },
    { 0x58, 0x0f, 0x01 },
    { 0x58, 0x10, 0x03 },
    { 0x58, 0x11, 0x09 },
    { 0x58, 0x12, 0x0A },
    { 0x58, 0x13, 0x03 },
    { 0x58, 0x14, 0x01 },
    { 0x58, 0x15, 0x01 },
    { 0x58, 0x16, 0x03 },
    { 0x58, 0x17, 0x08 },
    { 0x58, 0x18, 0x10 },
    { 0x58, 0x19, 0x0A },
    { 0x58, 0x1a, 0x06 },
    { 0x58, 0x1b, 0x06 },
    { 0x58, 0x1c, 0x08 },
    { 0x58, 0x1d, 0x0E },
    { 0x58, 0x1e, 0x22 },
    { 0x58, 0x1f, 0x18 },
    { 0x58, 0x20, 0x13 },
    { 0x58, 0x21, 0x12 },
    { 0x58, 0x22, 0x16 },
    { 0x58, 0x23, 0x1E },
    { 0x58, 0x24, 0x64 },
    { 0x58, 0x25, 0x2A },
    { 0x58, 0x26, 0x2C },
    { 0x58, 0x27, 0x2A },
    { 0x58, 0x28, 0x46 },
    { 0x58, 0x29, 0x2A },
    { 0x58, 0x2a, 0x26 },
    { 0x58, 0x2b, 0x24 },
    { 0x58, 0x2c, 0x26 },
    { 0x58, 0x2d, 0x2A },
    { 0x58, 0x2e, 0x28 },
    { 0x58, 0x2f, 0x42 },
    { 0x58, 0x30, 0x40 },
    { 0x58, 0x31, 0x42 },
    { 0x58, 0x32, 0x08 },
    { 0x58, 0x33, 0x28 },
    { 0x58, 0x34, 0x26 },
    { 0x58, 0x35, 0x24 },
    { 0x58, 0x36, 0x26 },
    { 0x58, 0x37, 0x2A },
    { 0x58, 0x38, 0x44 },
    { 0x58, 0x39, 0x4A },
    { 0x58, 0x3a, 0x2C },
    { 0x58, 0x3b, 0x2a },
    { 0x58, 0x3c, 0x46 },
    { 0x58, 0x3d, 0xCE },
    { 0x56, 0x88, 0x11 }, // { 0x56, 0x88, 0x22 },
    { 0x56, 0x89, 0x11 }, // { 0x56, 0x89, 0x22 },
    { 0x56, 0x8a, 0x11 }, // { 0x56, 0x8a, 0x42 },
    { 0x56, 0x8b, 0x11 }, // { 0x56, 0x8b, 0x24 },
    { 0x56, 0x8c, 0x11 }, // { 0x56, 0x8c, 0x42 },
    { 0x56, 0x8d, 0x11 }, // { 0x56, 0x8d, 0x24 },
    { 0x56, 0x8e, 0x11 }, // { 0x56, 0x8e, 0x22 },
    { 0x56, 0x8f, 0x11 }, // { 0x56, 0x8f, 0x22 },
    { 0x50, 0x25, 0x00 },
    { 0x3a, 0x0f, 0x42 }, // { 0x3a, 0x0f, 0x30 },
    { 0x3a, 0x10, 0x38 }, // { 0x3a, 0x10, 0x28 },
    { 0x3a, 0x1b, 0x44 }, // { 0x3a, 0x1b, 0x30 },
    { 0x3a, 0x1e, 0x36 }, // { 0x3a, 0x1e, 0x28 },
    { 0x3a, 0x11, 0x60 }, // { 0x3a, 0x11, 0x61 },
    { 0x3a, 0x1f, 0x10 },
    { 0x40, 0x05, 0x1a },
    { 0x34, 0x06, 0x00 },
    { 0x35, 0x03, 0x00 },
    { 0x30, 0x08, 0x02 },

// OpenMV Custom.

    { 0x3a, 0x02, 0x07 },
    { 0x3a, 0x03, 0xae },
    { 0x3a, 0x08, 0x01 },
    { 0x3a, 0x09, 0x27 },
    { 0x3a, 0x0a, 0x00 },
    { 0x3a, 0x0b, 0xf6 },
    { 0x3a, 0x0e, 0x06 },
    { 0x3a, 0x0d, 0x08 },
    { 0x3a, 0x14, 0x07 },
    { 0x3a, 0x15, 0xae },
    { 0x44, 0x01, 0x0d }, // | Read SRAM enable when blanking | Read SRAM at first blanking
    { 0x47, 0x23, 0x03 }, // DVP JPEG Mode456 Skip Line Number

// End.

    { 0x00, 0x00, 0x00 }
};
ov5640_reg_cfg_t ov5640_init_cfg[207] = {
	{0x3008, 0x42}, //{0x3008, 0x42},
	{0x3103, 0x03}, //{0x3103, 0x03},
    {0x3017, 0xFF},
    {0x3018, 0xFF},
    {OV5640_SC_PLL_CONTRL0, 0x1A},
//    {OV5640_SC_PLL_CONTRL1, 0x41},
//    {OV5640_SC_PLL_CONTRL2, 0x30},
    {OV5640_SC_PLL_CONTRL3, 0x13},  //12M //{OV5640_SC_PLL_CONTRL3, 0x13},  //24M
//    {OV5640_SC_PLL_CONTRL0, 0x1A},
//    {OV5640_SC_PLL_CONTRL3, 0x13},
    {0x3108, 0x01},
    {0x3630, 0x36},
    {0x3631, 0x0E},
    {0x3632, 0xE2},
    {0x3633, 0x12},
    {0x3621, 0xE0},
    {0x3704, 0xA0},
    {0x3703, 0x5A},
    {0x3715, 0x78},
    {0x3717, 0x01},
    {0x370B, 0x60},
    {0x3705, 0x1A},
    {0x3905, 0x02},
    {0x3906, 0x10},
    {0x3901, 0x0A},
    {0x3731, 0x12},
    {0x3600, 0x08},
    {0x3601, 0x33},
    {0x302D, 0x60},
    {0x3620, 0x52},
    {0x371B, 0x20},
    {0x471C, 0x50},
    {0x3A13, 0x43},
    {0x3A18, 0x00},
    {0x3A19, 0xF8},
    {0x3635, 0x13},
    {0x3636, 0x03},
    {0x3634, 0x40},
    {0x3622, 0x01},
    {0x3C01, 0x34},
    {0x3C04, 0x28},
    {0x3C05, 0x98},
    {0x3C06, 0x00},
    {0x3C07, 0x08},
    {0x3C08, 0x00},
    {0x3C09, 0x1C},
    {0x3C0A, 0x9C},
    {0x3C0B, 0x40},
    {0x3810, 0x00},
    {0x3811, 0x10},
    {0x3812, 0x00},
    {0x3708, 0x64},
    {0x4001, 0x02},
    {0x4005, 0x1A},
    {0x3000, 0x00},
    {0x3004, 0xFF},
    {0x300E, 0x58},
    {0x302E, 0x00},
    {0x4300, 0x30},
    {0x501F, 0x00},
    {0x440E, 0x00},
    {0x5000, 0xA7},
    {0x3A0F, 0x30},
    {0x3A10, 0x28},
    {0x3A1B, 0x30},
    {0x3A1E, 0x26},
    {0x3A11, 0x60},
    {0x3A1F, 0x14},
    {0x5800, 0x23},
    {0x5801, 0x14},
    {0x5802, 0x0F},
    {0x5803, 0x0F},
    {0x5804, 0x12},
    {0x5805, 0x26},
    {0x5806, 0x0C},
    {0x5807, 0x08},
    {0x5808, 0x05},
    {0x5809, 0x05},
    {0x580A, 0x08},
    {0x580B, 0x0D},
    {0x580C, 0x08},
    {0x580D, 0x03},
    {0x580E, 0x00},
    {0x580F, 0x00},
    {0x5810, 0x03},
    {0x5811, 0x09},
    {0x5812, 0x07},
    {0x5813, 0x03},
    {0x5814, 0x00},
    {0x5815, 0x01},
    {0x5816, 0x03},
    {0x5817, 0x08},
    {0x5818, 0x0D},
    {0x5819, 0x08},
    {0x581A, 0x05},
    {0x581B, 0x06},
    {0x581C, 0x08},
    {0x581D, 0x0E},
    {0x581E, 0x29},
    {0x581F, 0x17},
    {0x5820, 0x11},
    {0x5821, 0x11},
    {0x5822, 0x15},
    {0x5823, 0x28},
    {0x5824, 0x46},
    {0x5825, 0x26},
    {0x5826, 0x08},
    {0x5827, 0x26},
    {0x5828, 0x64},
    {0x5829, 0x26},
    {0x582A, 0x24},
    {0x582B, 0x22},
    {0x582C, 0x24},
    {0x582D, 0x24},
    {0x582E, 0x06},
    {0x582F, 0x22},
    {0x5830, 0x40},
    {0x5831, 0x42},
    {0x5832, 0x24},
    {0x5833, 0x26},
    {0x5834, 0x24},
    {0x5835, 0x22},
    {0x5836, 0x22},
    {0x5837, 0x26},
    {0x5838, 0x44},
    {0x5839, 0x24},
    {0x583A, 0x26},
    {0x583B, 0x28},
    {0x583C, 0x42},
    {0x583D, 0xCE},
    {0x5180, 0xFF},
    {0x5181, 0xF2},
    {0x5182, 0x00},
    {0x5183, 0x14},
    {0x5184, 0x25},
    {0x5185, 0x24},
    {0x5186, 0x09},
    {0x5187, 0x09},
    {0x5188, 0x09},
    {0x5189, 0x75},
    {0x518A, 0x54},
    {0x518B, 0xE0},
    {0x518C, 0xB2},
    {0x518D, 0x42},
    {0x518E, 0x3D},
    {0x518F, 0x56},
    {0x5190, 0x46},
    {0x5191, 0xF8},
    {0x5192, 0x04},
    {0x5193, 0x70},
    {0x5194, 0xF0},
    {0x5195, 0xF0},
    {0x5196, 0x03},
    {0x5197, 0x01},
    {0x5198, 0x04},
    {0x5199, 0x12},
    {0x519A, 0x04},
    {0x519B, 0x00},
    {0x519C, 0x06},
    {0x519D, 0x82},
    {0x519E, 0x38},
    {0x5480, 0x01},
    {0x5481, 0x08},
    {0x5482, 0x14},
    {0x5483, 0x28},
    {0x5484, 0x51},
    {0x5485, 0x65},
    {0x5486, 0x71},
    {0x5487, 0x7D},
    {0x5488, 0x87},
    {0x5489, 0x91},
    {0x548A, 0x9A},
    {0x548B, 0xAA},
    {0x548C, 0xB8},
    {0x548D, 0xCD},
    {0x548E, 0xDD},
    {0x548F, 0xEA},
    {0x5490, 0x1D},
    {0x5381, 0x1E},
    {0x5382, 0x5B},
    {0x5383, 0x08},
    {0x5384, 0x0A},
    {0x5385, 0x7E},
    {0x5386, 0x88},
    {0x5387, 0x7C},
    {0x5388, 0x6C},
    {0x5389, 0x10},
    {0x538A, 0x01},
    {0x538B, 0x98},
    {0x5580, 0x06},
    {0x5583, 0x40},
    {0x5584, 0x10},
    {0x5589, 0x10},
    {0x558A, 0x00},
    {0x558B, 0xF8},
    {0x501D, 0x40},
    {0x5300, 0x08},
    {0x5301, 0x30},
    {0x5302, 0x10},
    {0x5303, 0x00},
    {0x5304, 0x08},
    {0x5305, 0x30},
    {0x5306, 0x08},
    {0x5307, 0x16},
    {0x5309, 0x08},
    {0x530A, 0x30},
    {0x530B, 0x04},
    {0x530C, 0x06},
    {0x5025, 0x00},
    {0x3008, 0x02},
    {0x4740, 0x21},
};

//ov5640_reg_cfg_t ov5640_init_cfg[254] =
//  {
//    {OV5640_SCCB_SYSTEM_CTRL1, 0x11},
//    {OV5640_SYSTEM_CTROL0, 0x82},
//    {OV5640_SCCB_SYSTEM_CTRL1, 0x03},
//    {OV5640_PAD_OUTPUT_ENABLE01, 0xFF},
//    {OV5640_PAD_OUTPUT_ENABLE02, 0xf3},
//    {OV5640_SC_PLL_CONTRL0, 0x18},
//    {OV5640_SYSTEM_CTROL0, 0x02},
//    {OV5640_SC_PLL_CONTRL1, 0x41},
//    {OV5640_SC_PLL_CONTRL2, 0x30},
//    {OV5640_SC_PLL_CONTRL3, 0x13},
//    {OV5640_SYSTEM_ROOT_DIVIDER, 0x01},
//    {0x3630, 0x36},
//    {0x3631, 0x0e},
//    {0x3632, 0xe2},
//    {0x3633, 0x12},
//    {0x3621, 0xe0},
//    {0x3704, 0xa0},
//    {0x3703, 0x5a},
//    {0x3715, 0x78},
//    {0x3717, 0x01},
//    {0x370b, 0x60},
//    {0x3705, 0x1a},
//    {0x3905, 0x02},
//    {0x3906, 0x10},
//    {0x3901, 0x0a},
//    {0x3731, 0x12},
//    {0x3600, 0x08},
//    {0x3601, 0x33},
//    {0x302d, 0x60},
//    {0x3620, 0x52},
//    {0x371b, 0x20},
//    {0x471c, 0x50},
//    {OV5640_AEC_CTRL13, 0x43},
//    {OV5640_AEC_GAIN_CEILING_HIGH, 0x00},
//    {OV5640_AEC_GAIN_CEILING_LOW, 0xf8},
//    {0x3635, 0x13},
//    {0x3636, 0x03},
//    {0x3634, 0x40},
//    {0x3622, 0x01},
//    {OV5640_5060HZ_CTRL01, 0x34},
//    {OV5640_5060HZ_CTRL04, 0x28},
//    {OV5640_5060HZ_CTRL05, 0x98},
//    {OV5640_LIGHTMETER1_TH_HIGH, 0x00},
//    {OV5640_LIGHTMETER1_TH_LOW, 0x00},
//    {OV5640_LIGHTMETER2_TH_HIGH, 0x01},
//    {OV5640_LIGHTMETER2_TH_LOW, 0x2c},
//    {OV5640_SAMPLE_NUMBER_HIGH, 0x9c},
//    {OV5640_SAMPLE_NUMBER_LOW, 0x40},
//    {OV5640_TIMING_TC_REG20, 0x06},
//    {OV5640_TIMING_TC_REG21, 0x00},
//    {OV5640_TIMING_X_INC, 0x31},
//    {OV5640_TIMING_Y_INC, 0x31},
//    {OV5640_TIMING_HS_HIGH, 0x00},
//    {OV5640_TIMING_HS_LOW, 0x00},
//    {OV5640_TIMING_VS_HIGH, 0x00},
//    {OV5640_TIMING_VS_LOW, 0x04},
//    {OV5640_TIMING_HW_HIGH, 0x0a},
//    {OV5640_TIMING_HW_LOW, 0x3f},
//    {OV5640_TIMING_VH_HIGH, 0x07},
//    {OV5640_TIMING_VH_LOW, 0x9b},
//    {OV5640_TIMING_DVPHO_HIGH, 0x03},
//    {OV5640_TIMING_DVPHO_LOW, 0x20},
//    {OV5640_TIMING_DVPVO_HIGH, 0x02},
//    {OV5640_TIMING_DVPVO_LOW, 0x58},
//    {OV5640_TIMING_HTS_HIGH, 0x06},
//    {OV5640_TIMING_HTS_LOW, 0x40},
//    {OV5640_TIMING_VTS_HIGH, 0x03},
//    {OV5640_TIMING_VTS_LOW, 0xe8},
//    {OV5640_TIMING_HOFFSET_HIGH, 0x00},
//    {OV5640_TIMING_HOFFSET_LOW, 0x10},
//    {OV5640_TIMING_VOFFSET_HIGH, 0x00},
//    {OV5640_TIMING_VOFFSET_LOW, 0x06},
//    {0x3618, 0x00},
//    {0x3612, 0x29},
//    {0x3708, 0x64},
//    {0x3709, 0x52},
//    {0x370c, 0x03},
//    {OV5640_AEC_CTRL02, 0x03},
//    {OV5640_AEC_CTRL03, 0xd8},
//    {OV5640_AEC_B50_STEP_HIGH, 0x01},
//    {OV5640_AEC_B50_STEP_LOW, 0x27},
//    {OV5640_AEC_B60_STEP_HIGH, 0x00},
//    {OV5640_AEC_B60_STEP_LOW, 0xf6},
//    {OV5640_AEC_CTRL0E, 0x03},
//    {OV5640_AEC_CTRL0D, 0x04},
//    {OV5640_AEC_MAX_EXPO_HIGH, 0x03},
//    {OV5640_AEC_MAX_EXPO_LOW, 0xd8},
//    {OV5640_BLC_CTRL01, 0x02},
//    {OV5640_BLC_CTRL04, 0x02},
//    {OV5640_SYSREM_RESET00, 0x00},
//    {OV5640_SYSREM_RESET02, 0x1c},
//    {OV5640_CLOCK_ENABLE00, 0xff},
//    {OV5640_CLOCK_ENABLE02, 0xc3},
//    {OV5640_MIPI_CONTROL00, 0x58},
//    {0x302e, 0x00},
//    {OV5640_POLARITY_CTRL, 0x22},
//    {OV5640_FORMAT_CTRL00, 0x6F},
//    {OV5640_FORMAT_MUX_CTRL, 0x01},
//    {OV5640_JPG_MODE_SELECT, 0x03},
//    {OV5640_JPEG_CTRL07, 0x04},
//    {0x440e, 0x00},
//    {0x460b, 0x35},
//    {0x460c, 0x23},
//    {OV5640_PCLK_PERIOD, 0x22},
//    {0x3824, 0x02},
//    {OV5640_ISP_CONTROL00, 0xa7},
//    {OV5640_ISP_CONTROL01, 0xa3},
//    {OV5640_AWB_CTRL00, 0xff},
//    {OV5640_AWB_CTRL01, 0xf2},
//    {OV5640_AWB_CTRL02, 0x00},
//    {OV5640_AWB_CTRL03, 0x14},
//    {OV5640_AWB_CTRL04, 0x25},
//    {OV5640_AWB_CTRL05, 0x24},
//    {OV5640_AWB_CTRL06, 0x09},
//    {OV5640_AWB_CTRL07, 0x09},
//    {OV5640_AWB_CTRL08, 0x09},
//    {OV5640_AWB_CTRL09, 0x75},
//    {OV5640_AWB_CTRL10, 0x54},
//    {OV5640_AWB_CTRL11, 0xe0},
//    {OV5640_AWB_CTRL12, 0xb2},
//    {OV5640_AWB_CTRL13, 0x42},
//    {OV5640_AWB_CTRL14, 0x3d},
//    {OV5640_AWB_CTRL15, 0x56},
//    {OV5640_AWB_CTRL16, 0x46},
//    {OV5640_AWB_CTRL17, 0xf8},
//    {OV5640_AWB_CTRL18, 0x04},
//    {OV5640_AWB_CTRL19, 0x70},
//    {OV5640_AWB_CTRL20, 0xf0},
//    {OV5640_AWB_CTRL21, 0xf0},
//    {OV5640_AWB_CTRL22, 0x03},
//    {OV5640_AWB_CTRL23, 0x01},
//    {OV5640_AWB_CTRL24, 0x04},
//    {OV5640_AWB_CTRL25, 0x12},
//    {OV5640_AWB_CTRL26, 0x04},
//    {OV5640_AWB_CTRL27, 0x00},
//    {OV5640_AWB_CTRL28, 0x06},
//    {OV5640_AWB_CTRL29, 0x82},
//    {OV5640_AWB_CTRL30, 0x38},
//    {OV5640_CMX1, 0x1e},
//    {OV5640_CMX2, 0x5b},
//    {OV5640_CMX3, 0x08},
//    {OV5640_CMX4, 0x0a},
//    {OV5640_CMX5, 0x7e},
//    {OV5640_CMX6, 0x88},
//    {OV5640_CMX7, 0x7c},
//    {OV5640_CMX8, 0x6c},
//    {OV5640_CMX9, 0x10},
//    {OV5640_CMXSIGN_HIGH, 0x01},
//    {OV5640_CMXSIGN_LOW, 0x98},
//    {OV5640_CIP_SHARPENMT_TH1, 0x08},
//    {OV5640_CIP_SHARPENMT_TH2, 0x30},
//    {OV5640_CIP_SHARPENMT_OFFSET1, 0x10},
//    {OV5640_CIP_SHARPENMT_OFFSET2, 0x00},
//    {OV5640_CIP_DNS_TH1, 0x08},
//    {OV5640_CIP_DNS_TH2, 0x30},
//    {OV5640_CIP_DNS_OFFSET1, 0x08},
//    {OV5640_CIP_DNS_OFFSET2, 0x16},
//    {OV5640_CIP_CTRL, 0x08},
//    {OV5640_CIP_SHARPENTH_TH1, 0x30},
//    {OV5640_CIP_SHARPENTH_TH2, 0x04},
//    {OV5640_CIP_SHARPENTH_OFFSET1, 0x06},
//    {OV5640_GAMMA_CTRL00, 0x01},
//    {OV5640_GAMMA_YST00, 0x08},
//    {OV5640_GAMMA_YST01, 0x14},
//    {OV5640_GAMMA_YST02, 0x28},
//    {OV5640_GAMMA_YST03, 0x51},
//    {OV5640_GAMMA_YST04, 0x65},
//    {OV5640_GAMMA_YST05, 0x71},
//    {OV5640_GAMMA_YST06, 0x7d},
//    {OV5640_GAMMA_YST07, 0x87},
//    {OV5640_GAMMA_YST08, 0x91},
//    {OV5640_GAMMA_YST09, 0x9a},
//    {OV5640_GAMMA_YST0A, 0xaa},
//    {OV5640_GAMMA_YST0B, 0xb8},
//    {OV5640_GAMMA_YST0C, 0xcd},
//    {OV5640_GAMMA_YST0D, 0xdd},
//    {OV5640_GAMMA_YST0E, 0xea},
//    {OV5640_GAMMA_YST0F, 0x1d},
//    {OV5640_SDE_CTRL0, 0x02},
//    {OV5640_SDE_CTRL3, 0x40},
//    {OV5640_SDE_CTRL4, 0x10},
//    {OV5640_SDE_CTRL9, 0x10},
//    {OV5640_SDE_CTRL10, 0x00},
//    {OV5640_SDE_CTRL11, 0xf8},
//    {OV5640_GMTRX00, 0x23},
//    {OV5640_GMTRX01, 0x14},
//    {OV5640_GMTRX02, 0x0f},
//    {OV5640_GMTRX03, 0x0f},
//    {OV5640_GMTRX04, 0x12},
//    {OV5640_GMTRX05, 0x26},
//    {OV5640_GMTRX10, 0x0c},
//    {OV5640_GMTRX11, 0x08},
//    {OV5640_GMTRX12, 0x05},
//    {OV5640_GMTRX13, 0x05},
//    {OV5640_GMTRX14, 0x08},
//    {OV5640_GMTRX15, 0x0d},
//    {OV5640_GMTRX20, 0x08},
//    {OV5640_GMTRX21, 0x03},
//    {OV5640_GMTRX22, 0x00},
//    {OV5640_GMTRX23, 0x00},
//    {OV5640_GMTRX24, 0x03},
//    {OV5640_GMTRX25, 0x09},
//    {OV5640_GMTRX30, 0x07},
//    {OV5640_GMTRX31, 0x03},
//    {OV5640_GMTRX32, 0x00},
//    {OV5640_GMTRX33, 0x01},
//    {OV5640_GMTRX34, 0x03},
//    {OV5640_GMTRX35, 0x08},
//    {OV5640_GMTRX40, 0x0d},
//    {OV5640_GMTRX41, 0x08},
//    {OV5640_GMTRX42, 0x05},
//    {OV5640_GMTRX43, 0x06},
//    {OV5640_GMTRX44, 0x08},
//    {OV5640_GMTRX45, 0x0e},
//    {OV5640_GMTRX50, 0x29},
//    {OV5640_GMTRX51, 0x17},
//    {OV5640_GMTRX52, 0x11},
//    {OV5640_GMTRX53, 0x11},
//    {OV5640_GMTRX54, 0x15},
//    {OV5640_GMTRX55, 0x28},
//    {OV5640_BRMATRX00, 0x46},
//    {OV5640_BRMATRX01, 0x26},
//    {OV5640_BRMATRX02, 0x08},
//    {OV5640_BRMATRX03, 0x26},
//    {OV5640_BRMATRX04, 0x64},
//    {OV5640_BRMATRX05, 0x26},
//    {OV5640_BRMATRX06, 0x24},
//    {OV5640_BRMATRX07, 0x22},
//    {OV5640_BRMATRX08, 0x24},
//    {OV5640_BRMATRX09, 0x24},
//    {OV5640_BRMATRX20, 0x06},
//    {OV5640_BRMATRX21, 0x22},
//    {OV5640_BRMATRX22, 0x40},
//    {OV5640_BRMATRX23, 0x42},
//    {OV5640_BRMATRX24, 0x24},
//    {OV5640_BRMATRX30, 0x26},
//    {OV5640_BRMATRX31, 0x24},
//    {OV5640_BRMATRX32, 0x22},
//    {OV5640_BRMATRX33, 0x22},
//    {OV5640_BRMATRX34, 0x26},
//    {OV5640_BRMATRX40, 0x44},
//    {OV5640_BRMATRX41, 0x24},
//    {OV5640_BRMATRX42, 0x26},
//    {OV5640_BRMATRX43, 0x28},
//    {OV5640_BRMATRX44, 0x42},
//    {OV5640_LENC_BR_OFFSET, 0xce},
//    {0x5025, 0x00},
//    {OV5640_AEC_CTRL0F, 0x30},
//    {OV5640_AEC_CTRL10, 0x28},
//    {OV5640_AEC_CTRL1B, 0x30},
//    {OV5640_AEC_CTRL1E, 0x26},
//    {OV5640_AEC_CTRL11, 0x60},
//    {OV5640_AEC_CTRL1F, 0x14},
//    {OV5640_SYSTEM_CTROL0, 0x02},
//  };

/* OV5640模块输出RGB565寄存器配置表
 * 15FPS
 * 最大支持1280*800的RGB565图像输出
 */ov5640_reg_cfg_t ov5640_rgb565_cfg[46] = { //45
    {0x4300, 0x61}, //0x6F
    {0x501F, 0x01},
    {OV5640_SC_PLL_CONTRL1, 0x41}, //
    {OV5640_SC_PLL_CONTRL2, 0x64},
    {0x3C07, 0x07},
    {0x3820, 0x46}, //0x46
    {0x3821, 0x01}, //0x00

    {0x3A00, 0x38},
//    {0x3037, 0x13},

    {0x3814, 0x31},
    {0x3815, 0x31},
    {0x3800, 0x00},
    {0x3801, 0x00},
    {0x3802, 0x00},
    {0x3803, 0x00},
    {0x3804, 0x0A},
    {0x3805, 0x3F},
    {0x3806, 0x06},
    {0x3807, 0xA9},
    {0x3808, 0x05},
    {0x3809, 0x00},
    {0x380A, 0x02},
    {0x380B, 0xD0},
    {0x380C, 0x05},
    {0x380D, 0xF8},
    {0x380E, 0x03},
    {0x380F, 0x84},
    {0x3813, 0x04},
    {0x3618, 0x00},
    {0x3612, 0x29},
    {0x3709, 0x52},
    {0x370C, 0x03},
    {0x3A02, 0x02},
    {0x3A03, 0xE0},
    {0x3A14, 0x02},
    {0x3A15, 0xE0},
    {0x4004, 0x02},
    {0x3002, 0x1C},
    {0x3006, 0xC3},
    {0x4713, 0x04},  //0x03
    {0x4407, 0x04},
    {0x460B, 0x37},
    {0x460C, 0x22},  //0x20
    {0x4837, 0x16},
    {0x3824, 0x02}, //0x04
    {0x5001, 0xA3}, //0xA3
    {0x3503, 0x00},
};

ov5640_reg_cfg_t ov5640_rgb888_cfg[46] = { //45
    {0x4300, 0x6F}, //0x6F
    {0x501F, 0x01},
    {OV5640_SC_PLL_CONTRL1, 0x41}, //
    {OV5640_SC_PLL_CONTRL2, 0x64},
    {0x3C07, 0x07},
    {0x3820, 0x46}, //0x46
    {0x3821, 0x01}, //0x00

    {0x3A00, 0x38},
//    {0x3037, 0x13},

    {0x3814, 0x31},
    {0x3815, 0x31},
    {0x3800, 0x00},
    {0x3801, 0x00},
    {0x3802, 0x00},
    {0x3803, 0x00},
    {0x3804, 0x0A},
    {0x3805, 0x3F},
    {0x3806, 0x06},
    {0x3807, 0xA9},
    {0x3808, 0x05},
    {0x3809, 0x00},
    {0x380A, 0x02},
    {0x380B, 0xD0},
    {0x380C, 0x05},
    {0x380D, 0xF8},
    {0x380E, 0x03},
    {0x380F, 0x84},
    {0x3813, 0x04},
    {0x3618, 0x00},
    {0x3612, 0x29},
    {0x3709, 0x52},
    {0x370C, 0x03},
    {0x3A02, 0x02},
    {0x3A03, 0xE0},
    {0x3A14, 0x02},
    {0x3A15, 0xE0},
    {0x4004, 0x02},
    {0x3002, 0x1C},
    {0x3006, 0xC3},
    {0x4713, 0x04},  //0x03
    {0x4407, 0x04},
    {0x460B, 0x37},
    {0x460C, 0x22},  //0x20
    {0x4837, 0x16},
    {0x3824, 0x02}, //0x04
    {0x5001, 0xA3}, //0xA3
    {0x3503, 0x00},
};

/* OV5640模块输出JPEG寄存器配置表
 * 7.5FPS
 * 最大支持2592*1944的JPEG图像输出
 */
ov5640_reg_cfg_t ov5640_jpeg_cfg[41] = {
    {0x4300, 0x30},
    {0x501F, 0x01},
    {0x3035, 0x21},
    {0x3036, 0x69},
    {0x3C07, 0x07},
    {0x3820, 0x46},
    {0x3821, 0x20},
    {0x3814, 0x11},
    {0x3815, 0x11},
    {0x3800, 0x00},
    {0x3801, 0x00},
    {0x3802, 0x00},
    {0x3803, 0x00},
    {0x3804, 0x0A},
    {0x3805, 0x3F},
    {0x3806, 0x07},
    {0x3807, 0x9F},
    {0x3808, 0x02},
    {0x3809, 0x80},
    {0x380A, 0x01},
    {0x380B, 0xE0},
    {0x380C, 0x0B},
    {0x380D, 0x1C},
    {0x380E, 0x07},
    {0x380F, 0xB0},
    {0x3813, 0x04},
    {0x3618, 0x04},
    {0x3612, 0x2B},
    {0x3709, 0x12},
    {0x370C, 0x00},
    {0x4004, 0x06},
    {0x3002, 0x00},
    {0x3006, 0xFF},
    {0x4713, 0x03},
    {0x4407, 0x01},
    {0x460B, 0x35},
    {0x460C, 0x22},
    {0x4837, 0x16},
    {0x3824, 0x02},
    {0x5001, 0xA3},
    {0x3503, 0x00},
};

/* OV5640自动对焦固件 */
uint8_t ov5640_auto_focus_firmware[4077] = {
    0x02, 0x0F, 0xD6, 0x02, 0x0A, 0x39, 0xC2, 0x01, 0x22, 0x22, 0x00, 0x02, 0x0F, 0xB2, 0xE5, 0x1F,
    0x70, 0x72, 0xF5, 0x1E, 0xD2, 0x35, 0xFF, 0xEF, 0x25, 0xE0, 0x24, 0x4E, 0xF8, 0xE4, 0xF6, 0x08,
    0xF6, 0x0F, 0xBF, 0x34, 0xF2, 0x90, 0x0E, 0x93, 0xE4, 0x93, 0xFF, 0xE5, 0x4B, 0xC3, 0x9F, 0x50,
    0x04, 0x7F, 0x05, 0x80, 0x02, 0x7F, 0xFB, 0x78, 0xBD, 0xA6, 0x07, 0x12, 0x0F, 0x04, 0x40, 0x04,
    0x7F, 0x03, 0x80, 0x02, 0x7F, 0x30, 0x78, 0xBC, 0xA6, 0x07, 0xE6, 0x18, 0xF6, 0x08, 0xE6, 0x78,
    0xB9, 0xF6, 0x78, 0xBC, 0xE6, 0x78, 0xBA, 0xF6, 0x78, 0xBF, 0x76, 0x33, 0xE4, 0x08, 0xF6, 0x78,
    0xB8, 0x76, 0x01, 0x75, 0x4A, 0x02, 0x78, 0xB6, 0xF6, 0x08, 0xF6, 0x74, 0xFF, 0x78, 0xC1, 0xF6,
    0x08, 0xF6, 0x75, 0x1F, 0x01, 0x78, 0xBC, 0xE6, 0x75, 0xF0, 0x05, 0xA4, 0xF5, 0x4B, 0x12, 0x0A,
    0xFF, 0xC2, 0x37, 0x22, 0x78, 0xB8, 0xE6, 0xD3, 0x94, 0x00, 0x40, 0x02, 0x16, 0x22, 0xE5, 0x1F,
    0xB4, 0x05, 0x23, 0xE4, 0xF5, 0x1F, 0xC2, 0x01, 0x78, 0xB6, 0xE6, 0xFE, 0x08, 0xE6, 0xFF, 0x78,
    0x4E, 0xA6, 0x06, 0x08, 0xA6, 0x07, 0xA2, 0x37, 0xE4, 0x33, 0xF5, 0x3C, 0x90, 0x30, 0x28, 0xF0,
    0x75, 0x1E, 0x10, 0xD2, 0x35, 0x22, 0xE5, 0x4B, 0x75, 0xF0, 0x05, 0x84, 0x78, 0xBC, 0xF6, 0x90,
    0x0E, 0x8C, 0xE4, 0x93, 0xFF, 0x25, 0xE0, 0x24, 0x0A, 0xF8, 0xE6, 0xFC, 0x08, 0xE6, 0xFD, 0x78,
    0xBC, 0xE6, 0x25, 0xE0, 0x24, 0x4E, 0xF8, 0xA6, 0x04, 0x08, 0xA6, 0x05, 0xEF, 0x12, 0x0F, 0x0B,
    0xD3, 0x78, 0xB7, 0x96, 0xEE, 0x18, 0x96, 0x40, 0x0D, 0x78, 0xBC, 0xE6, 0x78, 0xB9, 0xF6, 0x78,
    0xB6, 0xA6, 0x06, 0x08, 0xA6, 0x07, 0x90, 0x0E, 0x8C, 0xE4, 0x93, 0x12, 0x0F, 0x0B, 0xC3, 0x78,
    0xC2, 0x96, 0xEE, 0x18, 0x96, 0x50, 0x0D, 0x78, 0xBC, 0xE6, 0x78, 0xBA, 0xF6, 0x78, 0xC1, 0xA6,
    0x06, 0x08, 0xA6, 0x07, 0x78, 0xB6, 0xE6, 0xFE, 0x08, 0xE6, 0xC3, 0x78, 0xC2, 0x96, 0xFF, 0xEE,
    0x18, 0x96, 0x78, 0xC3, 0xF6, 0x08, 0xA6, 0x07, 0x90, 0x0E, 0x95, 0xE4, 0x18, 0x12, 0x0E, 0xE9,
    0x40, 0x02, 0xD2, 0x37, 0x78, 0xBC, 0xE6, 0x08, 0x26, 0x08, 0xF6, 0xE5, 0x1F, 0x64, 0x01, 0x70,
    0x4A, 0xE6, 0xC3, 0x78, 0xC0, 0x12, 0x0E, 0xDF, 0x40, 0x05, 0x12, 0x0E, 0xDA, 0x40, 0x39, 0x12,
    0x0F, 0x02, 0x40, 0x04, 0x7F, 0xFE, 0x80, 0x02, 0x7F, 0x02, 0x78, 0xBD, 0xA6, 0x07, 0x78, 0xB9,
    0xE6, 0x24, 0x03, 0x78, 0xBF, 0xF6, 0x78, 0xB9, 0xE6, 0x24, 0xFD, 0x78, 0xC0, 0xF6, 0x12, 0x0F,
    0x02, 0x40, 0x06, 0x78, 0xC0, 0xE6, 0xFF, 0x80, 0x04, 0x78, 0xBF, 0xE6, 0xFF, 0x78, 0xBE, 0xA6,
    0x07, 0x75, 0x1F, 0x02, 0x78, 0xB8, 0x76, 0x01, 0x02, 0x02, 0x4A, 0xE5, 0x1F, 0x64, 0x02, 0x60,
    0x03, 0x02, 0x02, 0x2A, 0x78, 0xBE, 0xE6, 0xFF, 0xC3, 0x78, 0xC0, 0x12, 0x0E, 0xE0, 0x40, 0x08,
    0x12, 0x0E, 0xDA, 0x50, 0x03, 0x02, 0x02, 0x28, 0x12, 0x0F, 0x02, 0x40, 0x04, 0x7F, 0xFF, 0x80,
    0x02, 0x7F, 0x01, 0x78, 0xBD, 0xA6, 0x07, 0x78, 0xB9, 0xE6, 0x04, 0x78, 0xBF, 0xF6, 0x78, 0xB9,
    0xE6, 0x14, 0x78, 0xC0, 0xF6, 0x18, 0x12, 0x0F, 0x04, 0x40, 0x04, 0xE6, 0xFF, 0x80, 0x02, 0x7F,
    0x00, 0x78, 0xBF, 0xA6, 0x07, 0xD3, 0x08, 0xE6, 0x64, 0x80, 0x94, 0x80, 0x40, 0x04, 0xE6, 0xFF,
    0x80, 0x02, 0x7F, 0x00, 0x78, 0xC0, 0xA6, 0x07, 0xC3, 0x18, 0xE6, 0x64, 0x80, 0x94, 0xB3, 0x50,
    0x04, 0xE6, 0xFF, 0x80, 0x02, 0x7F, 0x33, 0x78, 0xBF, 0xA6, 0x07, 0xC3, 0x08, 0xE6, 0x64, 0x80,
    0x94, 0xB3, 0x50, 0x04, 0xE6, 0xFF, 0x80, 0x02, 0x7F, 0x33, 0x78, 0xC0, 0xA6, 0x07, 0x12, 0x0F,
    0x02, 0x40, 0x06, 0x78, 0xC0, 0xE6, 0xFF, 0x80, 0x04, 0x78, 0xBF, 0xE6, 0xFF, 0x78, 0xBE, 0xA6,
    0x07, 0x75, 0x1F, 0x03, 0x78, 0xB8, 0x76, 0x01, 0x80, 0x20, 0xE5, 0x1F, 0x64, 0x03, 0x70, 0x26,
    0x78, 0xBE, 0xE6, 0xFF, 0xC3, 0x78, 0xC0, 0x12, 0x0E, 0xE0, 0x40, 0x05, 0x12, 0x0E, 0xDA, 0x40,
    0x09, 0x78, 0xB9, 0xE6, 0x78, 0xBE, 0xF6, 0x75, 0x1F, 0x04, 0x78, 0xBE, 0xE6, 0x75, 0xF0, 0x05,
    0xA4, 0xF5, 0x4B, 0x02, 0x0A, 0xFF, 0xE5, 0x1F, 0xB4, 0x04, 0x10, 0x90, 0x0E, 0x94, 0xE4, 0x78,
    0xC3, 0x12, 0x0E, 0xE9, 0x40, 0x02, 0xD2, 0x37, 0x75, 0x1F, 0x05, 0x22, 0x30, 0x01, 0x03, 0x02,
    0x04, 0xC0, 0x30, 0x02, 0x03, 0x02, 0x04, 0xC0, 0x90, 0x51, 0xA5, 0xE0, 0x78, 0x93, 0xF6, 0xA3,
    0xE0, 0x08, 0xF6, 0xA3, 0xE0, 0x08, 0xF6, 0xE5, 0x1F, 0x70, 0x3C, 0x75, 0x1E, 0x20, 0xD2, 0x35,
    0x12, 0x0C, 0x7A, 0x78, 0x7E, 0xA6, 0x06, 0x08, 0xA6, 0x07, 0x78, 0x8B, 0xA6, 0x09, 0x18, 0x76,
    0x01, 0x12, 0x0C, 0x5B, 0x78, 0x4E, 0xA6, 0x06, 0x08, 0xA6, 0x07, 0x78, 0x8B, 0xE6, 0x78, 0x6E,
    0xF6, 0x75, 0x1F, 0x01, 0x78, 0x93, 0xE6, 0x78, 0x90, 0xF6, 0x78, 0x94, 0xE6, 0x78, 0x91, 0xF6,
    0x78, 0x95, 0xE6, 0x78, 0x92, 0xF6, 0x22, 0x79, 0x90, 0xE7, 0xD3, 0x78, 0x93, 0x96, 0x40, 0x05,
    0xE7, 0x96, 0xFF, 0x80, 0x08, 0xC3, 0x79, 0x93, 0xE7, 0x78, 0x90, 0x96, 0xFF, 0x78, 0x88, 0x76,
    0x00, 0x08, 0xA6, 0x07, 0x79, 0x91, 0xE7, 0xD3, 0x78, 0x94, 0x96, 0x40, 0x05, 0xE7, 0x96, 0xFF,
    0x80, 0x08, 0xC3, 0x79, 0x94, 0xE7, 0x78, 0x91, 0x96, 0xFF, 0x12, 0x0C, 0x8E, 0x79, 0x92, 0xE7,
    0xD3, 0x78, 0x95, 0x96, 0x40, 0x05, 0xE7, 0x96, 0xFF, 0x80, 0x08, 0xC3, 0x79, 0x95, 0xE7, 0x78,
    0x92, 0x96, 0xFF, 0x12, 0x0C, 0x8E, 0x12, 0x0C, 0x5B, 0x78, 0x8A, 0xE6, 0x25, 0xE0, 0x24, 0x4E,
    0xF8, 0xA6, 0x06, 0x08, 0xA6, 0x07, 0x78, 0x8A, 0xE6, 0x24, 0x6E, 0xF8, 0xA6, 0x09, 0x78, 0x8A,
    0xE6, 0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xD3, 0xEF, 0x94, 0x0F, 0xEE, 0x64, 0x80, 0x94, 0x80,
    0x40, 0x04, 0x7F, 0x00, 0x80, 0x05, 0x78, 0x8A, 0xE6, 0x04, 0xFF, 0x78, 0x8A, 0xA6, 0x07, 0xE5,
    0x1F, 0xB4, 0x01, 0x0A, 0xE6, 0x60, 0x03, 0x02, 0x04, 0xC0, 0x75, 0x1F, 0x02, 0x22, 0x12, 0x0C,
    0x7A, 0x78, 0x80, 0xA6, 0x06, 0x08, 0xA6, 0x07, 0x12, 0x0C, 0x7A, 0x78, 0x82, 0xA6, 0x06, 0x08,
    0xA6, 0x07, 0x78, 0x6E, 0xE6, 0x78, 0x8C, 0xF6, 0x78, 0x6E, 0xE6, 0x78, 0x8D, 0xF6, 0x7F, 0x01,
    0xEF, 0x25, 0xE0, 0x24, 0x4F, 0xF9, 0xC3, 0x78, 0x81, 0xE6, 0x97, 0x18, 0xE6, 0x19, 0x97, 0x50,
    0x0A, 0x12, 0x0C, 0x82, 0x78, 0x80, 0xA6, 0x04, 0x08, 0xA6, 0x05, 0x74, 0x6E, 0x2F, 0xF9, 0x78,
    0x8C, 0xE6, 0xC3, 0x97, 0x50, 0x08, 0x74, 0x6E, 0x2F, 0xF8, 0xE6, 0x78, 0x8C, 0xF6, 0xEF, 0x25,
    0xE0, 0x24, 0x4F, 0xF9, 0xD3, 0x78, 0x83, 0xE6, 0x97, 0x18, 0xE6, 0x19, 0x97, 0x40, 0x0A, 0x12,
    0x0C, 0x82, 0x78, 0x82, 0xA6, 0x04, 0x08, 0xA6, 0x05, 0x74, 0x6E, 0x2F, 0xF9, 0x78, 0x8D, 0xE6,
    0xD3, 0x97, 0x40, 0x08, 0x74, 0x6E, 0x2F, 0xF8, 0xE6, 0x78, 0x8D, 0xF6, 0x0F, 0xEF, 0x64, 0x10,
    0x70, 0x9E, 0xC3, 0x79, 0x81, 0xE7, 0x78, 0x83, 0x96, 0xFF, 0x19, 0xE7, 0x18, 0x96, 0x78, 0x84,
    0xF6, 0x08, 0xA6, 0x07, 0xC3, 0x79, 0x8C, 0xE7, 0x78, 0x8D, 0x96, 0x08, 0xF6, 0xD3, 0x79, 0x81,
    0xE7, 0x78, 0x7F, 0x96, 0x19, 0xE7, 0x18, 0x96, 0x40, 0x05, 0x09, 0xE7, 0x08, 0x80, 0x06, 0xC3,
    0x79, 0x7F, 0xE7, 0x78, 0x81, 0x96, 0xFF, 0x19, 0xE7, 0x18, 0x96, 0xFE, 0x78, 0x86, 0xA6, 0x06,
    0x08, 0xA6, 0x07, 0x79, 0x8C, 0xE7, 0xD3, 0x78, 0x8B, 0x96, 0x40, 0x05, 0xE7, 0x96, 0xFF, 0x80,
    0x08, 0xC3, 0x79, 0x8B, 0xE7, 0x78, 0x8C, 0x96, 0xFF, 0x78, 0x8F, 0xA6, 0x07, 0xE5, 0x1F, 0x64,
    0x02, 0x70, 0x69, 0x90, 0x0E, 0x91, 0x93, 0xFF, 0x18, 0xE6, 0xC3, 0x9F, 0x50, 0x72, 0x12, 0x0C,
    0x4A, 0x12, 0x0C, 0x2F, 0x90, 0x0E, 0x8E, 0x12, 0x0C, 0x38, 0x78, 0x80, 0x12, 0x0C, 0x6B, 0x7B,
    0x04, 0x12, 0x0C, 0x1D, 0xC3, 0x12, 0x06, 0x45, 0x50, 0x56, 0x90, 0x0E, 0x92, 0xE4, 0x93, 0xFF,
    0x78, 0x8F, 0xE6, 0x9F, 0x40, 0x02, 0x80, 0x11, 0x90, 0x0E, 0x90, 0xE4, 0x93, 0xFF, 0xD3, 0x78,
    0x89, 0xE6, 0x9F, 0x18, 0xE6, 0x94, 0x00, 0x40, 0x03, 0x75, 0x1F, 0x05, 0x12, 0x0C, 0x4A, 0x12,
    0x0C, 0x2F, 0x90, 0x0E, 0x8F, 0x12, 0x0C, 0x38, 0x78, 0x7E, 0x12, 0x0C, 0x6B, 0x7B, 0x40, 0x12,
    0x0C, 0x1D, 0xD3, 0x12, 0x06, 0x45, 0x40, 0x18, 0x75, 0x1F, 0x05, 0x22, 0xE5, 0x1F, 0xB4, 0x05,
    0x0F, 0xD2, 0x01, 0xC2, 0x02, 0xE4, 0xF5, 0x1F, 0xF5, 0x1E, 0xD2, 0x35, 0xD2, 0x33, 0xD2, 0x36,
    0x22, 0xEF, 0x8D, 0xF0, 0xA4, 0xA8, 0xF0, 0xCF, 0x8C, 0xF0, 0xA4, 0x28, 0xCE, 0x8D, 0xF0, 0xA4,
    0x2E, 0xFE, 0x22, 0xBC, 0x00, 0x0B, 0xBE, 0x00, 0x29, 0xEF, 0x8D, 0xF0, 0x84, 0xFF, 0xAD, 0xF0,
    0x22, 0xE4, 0xCC, 0xF8, 0x75, 0xF0, 0x08, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xEC, 0x33, 0xFC,
    0xEE, 0x9D, 0xEC, 0x98, 0x40, 0x05, 0xFC, 0xEE, 0x9D, 0xFE, 0x0F, 0xD5, 0xF0, 0xE9, 0xE4, 0xCE,
    0xFD, 0x22, 0xED, 0xF8, 0xF5, 0xF0, 0xEE, 0x84, 0x20, 0xD2, 0x1C, 0xFE, 0xAD, 0xF0, 0x75, 0xF0,
    0x08, 0xEF, 0x2F, 0xFF, 0xED, 0x33, 0xFD, 0x40, 0x07, 0x98, 0x50, 0x06, 0xD5, 0xF0, 0xF2, 0x22,
    0xC3, 0x98, 0xFD, 0x0F, 0xD5, 0xF0, 0xEA, 0x22, 0xE8, 0x8F, 0xF0, 0xA4, 0xCC, 0x8B, 0xF0, 0xA4,
    0x2C, 0xFC, 0xE9, 0x8E, 0xF0, 0xA4, 0x2C, 0xFC, 0x8A, 0xF0, 0xED, 0xA4, 0x2C, 0xFC, 0xEA, 0x8E,
    0xF0, 0xA4, 0xCD, 0xA8, 0xF0, 0x8B, 0xF0, 0xA4, 0x2D, 0xCC, 0x38, 0x25, 0xF0, 0xFD, 0xE9, 0x8F,
    0xF0, 0xA4, 0x2C, 0xCD, 0x35, 0xF0, 0xFC, 0xEB, 0x8E, 0xF0, 0xA4, 0xFE, 0xA9, 0xF0, 0xEB, 0x8F,
    0xF0, 0xA4, 0xCF, 0xC5, 0xF0, 0x2E, 0xCD, 0x39, 0xFE, 0xE4, 0x3C, 0xFC, 0xEA, 0xA4, 0x2D, 0xCE,
    0x35, 0xF0, 0xFD, 0xE4, 0x3C, 0xFC, 0x22, 0x75, 0xF0, 0x08, 0x75, 0x82, 0x00, 0xEF, 0x2F, 0xFF,
    0xEE, 0x33, 0xFE, 0xCD, 0x33, 0xCD, 0xCC, 0x33, 0xCC, 0xC5, 0x82, 0x33, 0xC5, 0x82, 0x9B, 0xED,
    0x9A, 0xEC, 0x99, 0xE5, 0x82, 0x98, 0x40, 0x0C, 0xF5, 0x82, 0xEE, 0x9B, 0xFE, 0xED, 0x9A, 0xFD,
    0xEC, 0x99, 0xFC, 0x0F, 0xD5, 0xF0, 0xD6, 0xE4, 0xCE, 0xFB, 0xE4, 0xCD, 0xFA, 0xE4, 0xCC, 0xF9,
    0xA8, 0x82, 0x22, 0xB8, 0x00, 0xC1, 0xB9, 0x00, 0x59, 0xBA, 0x00, 0x2D, 0xEC, 0x8B, 0xF0, 0x84,
    0xCF, 0xCE, 0xCD, 0xFC, 0xE5, 0xF0, 0xCB, 0xF9, 0x78, 0x18, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE,
    0xED, 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xEB, 0x33, 0xFB, 0x10, 0xD7, 0x03, 0x99, 0x40, 0x04, 0xEB,
    0x99, 0xFB, 0x0F, 0xD8, 0xE5, 0xE4, 0xF9, 0xFA, 0x22, 0x78, 0x18, 0xEF, 0x2F, 0xFF, 0xEE, 0x33,
    0xFE, 0xED, 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xC9, 0x33, 0xC9, 0x10, 0xD7, 0x05, 0x9B, 0xE9, 0x9A,
    0x40, 0x07, 0xEC, 0x9B, 0xFC, 0xE9, 0x9A, 0xF9, 0x0F, 0xD8, 0xE0, 0xE4, 0xC9, 0xFA, 0xE4, 0xCC,
    0xFB, 0x22, 0x75, 0xF0, 0x10, 0xEF, 0x2F, 0xFF, 0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, 0xCC, 0x33,
    0xCC, 0xC8, 0x33, 0xC8, 0x10, 0xD7, 0x07, 0x9B, 0xEC, 0x9A, 0xE8, 0x99, 0x40, 0x0A, 0xED, 0x9B,
    0xFD, 0xEC, 0x9A, 0xFC, 0xE8, 0x99, 0xF8, 0x0F, 0xD5, 0xF0, 0xDA, 0xE4, 0xCD, 0xFB, 0xE4, 0xCC,
    0xFA, 0xE4, 0xC8, 0xF9, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42,
    0xF0, 0xE8, 0x9C, 0x45, 0xF0, 0x22, 0xE8, 0x60, 0x0F, 0xEC, 0xC3, 0x13, 0xFC, 0xED, 0x13, 0xFD,
    0xEE, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xD8, 0xF1, 0x22, 0xE8, 0x60, 0x0F, 0xEF, 0xC3, 0x33, 0xFF,
    0xEE, 0x33, 0xFE, 0xED, 0x33, 0xFD, 0xEC, 0x33, 0xFC, 0xD8, 0xF1, 0x22, 0xE4, 0x93, 0xFC, 0x74,
    0x01, 0x93, 0xFD, 0x74, 0x02, 0x93, 0xFE, 0x74, 0x03, 0x93, 0xFF, 0x22, 0xE6, 0xFB, 0x08, 0xE6,
    0xF9, 0x08, 0xE6, 0xFA, 0x08, 0xE6, 0xCB, 0xF8, 0x22, 0xEC, 0xF6, 0x08, 0xED, 0xF6, 0x08, 0xEE,
    0xF6, 0x08, 0xEF, 0xF6, 0x22, 0xA4, 0x25, 0x82, 0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83,
    0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
    0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
    0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x90, 0x38, 0x04, 0x78, 0x52, 0x12, 0x0B, 0xFD, 0x90,
    0x38, 0x00, 0xE0, 0xFE, 0xA3, 0xE0, 0xFD, 0xED, 0xFF, 0xC3, 0x12, 0x0B, 0x9E, 0x90, 0x38, 0x10,
    0x12, 0x0B, 0x92, 0x90, 0x38, 0x06, 0x78, 0x54, 0x12, 0x0B, 0xFD, 0x90, 0x38, 0x02, 0xE0, 0xFE,
    0xA3, 0xE0, 0xFD, 0xED, 0xFF, 0xC3, 0x12, 0x0B, 0x9E, 0x90, 0x38, 0x12, 0x12, 0x0B, 0x92, 0xA3,
    0xE0, 0xB4, 0x31, 0x07, 0x78, 0x52, 0x79, 0x52, 0x12, 0x0C, 0x13, 0x90, 0x38, 0x14, 0xE0, 0xB4,
    0x71, 0x15, 0x78, 0x52, 0xE6, 0xFE, 0x08, 0xE6, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8,
    0xF9, 0x79, 0x53, 0xF7, 0xEE, 0x19, 0xF7, 0x90, 0x38, 0x15, 0xE0, 0xB4, 0x31, 0x07, 0x78, 0x54,
    0x79, 0x54, 0x12, 0x0C, 0x13, 0x90, 0x38, 0x15, 0xE0, 0xB4, 0x71, 0x15, 0x78, 0x54, 0xE6, 0xFE,
    0x08, 0xE6, 0x78, 0x02, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x79, 0x55, 0xF7, 0xEE, 0x19,
    0xF7, 0x79, 0x52, 0x12, 0x0B, 0xD9, 0x09, 0x12, 0x0B, 0xD9, 0xAF, 0x47, 0x12, 0x0B, 0xB2, 0xE5,
    0x44, 0xFB, 0x7A, 0x00, 0xFD, 0x7C, 0x00, 0x12, 0x04, 0xD3, 0x78, 0x5A, 0xA6, 0x06, 0x08, 0xA6,
    0x07, 0xAF, 0x45, 0x12, 0x0B, 0xB2, 0xAD, 0x03, 0x7C, 0x00, 0x12, 0x04, 0xD3, 0x78, 0x56, 0xA6,
    0x06, 0x08, 0xA6, 0x07, 0xAF, 0x48, 0x78, 0x54, 0x12, 0x0B, 0xB4, 0xE5, 0x43, 0xFB, 0xFD, 0x7C,
    0x00, 0x12, 0x04, 0xD3, 0x78, 0x5C, 0xA6, 0x06, 0x08, 0xA6, 0x07, 0xAF, 0x46, 0x7E, 0x00, 0x78,
    0x54, 0x12, 0x0B, 0xB6, 0xAD, 0x03, 0x7C, 0x00, 0x12, 0x04, 0xD3, 0x78, 0x58, 0xA6, 0x06, 0x08,
    0xA6, 0x07, 0xC3, 0x78, 0x5B, 0xE6, 0x94, 0x08, 0x18, 0xE6, 0x94, 0x00, 0x50, 0x05, 0x76, 0x00,
    0x08, 0x76, 0x08, 0xC3, 0x78, 0x5D, 0xE6, 0x94, 0x08, 0x18, 0xE6, 0x94, 0x00, 0x50, 0x05, 0x76,
    0x00, 0x08, 0x76, 0x08, 0x78, 0x5A, 0x12, 0x0B, 0xC6, 0xFF, 0xD3, 0x78, 0x57, 0xE6, 0x9F, 0x18,
    0xE6, 0x9E, 0x40, 0x0E, 0x78, 0x5A, 0xE6, 0x13, 0xFE, 0x08, 0xE6, 0x78, 0x57, 0x12, 0x0C, 0x08,
    0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0x78, 0x5E, 0x12, 0x0B, 0xBE, 0xFF, 0xD3, 0x78, 0x59, 0xE6,
    0x9F, 0x18, 0xE6, 0x9E, 0x40, 0x0E, 0x78, 0x5C, 0xE6, 0x13, 0xFE, 0x08, 0xE6, 0x78, 0x59, 0x12,
    0x0C, 0x08, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x00, 0xE4, 0xFC, 0xFD, 0x78, 0x62, 0x12, 0x06, 0x99,
    0x78, 0x5A, 0x12, 0x0B, 0xC6, 0x78, 0x57, 0x26, 0xFF, 0xEE, 0x18, 0x36, 0xFE, 0x78, 0x66, 0x12,
    0x0B, 0xBE, 0x78, 0x59, 0x26, 0xFF, 0xEE, 0x18, 0x36, 0xFE, 0xE4, 0xFC, 0xFD, 0x78, 0x6A, 0x12,
    0x06, 0x99, 0x12, 0x0B, 0xCE, 0x78, 0x66, 0x12, 0x06, 0x8C, 0xD3, 0x12, 0x06, 0x45, 0x40, 0x08,
    0x12, 0x0B, 0xCE, 0x78, 0x66, 0x12, 0x06, 0x99, 0x78, 0x54, 0x12, 0x0B, 0xD0, 0x78, 0x6A, 0x12,
    0x06, 0x8C, 0xD3, 0x12, 0x06, 0x45, 0x40, 0x0A, 0x78, 0x54, 0x12, 0x0B, 0xD0, 0x78, 0x6A, 0x12,
    0x06, 0x99, 0x78, 0x61, 0xE6, 0x90, 0x60, 0x01, 0xF0, 0x78, 0x65, 0xE6, 0xA3, 0xF0, 0x78, 0x69,
    0xE6, 0xA3, 0xF0, 0x78, 0x55, 0xE6, 0xA3, 0xF0, 0x7D, 0x01, 0x78, 0x61, 0x12, 0x0B, 0xE9, 0x24,
    0x01, 0x12, 0x0B, 0xA6, 0x78, 0x65, 0x12, 0x0B, 0xE9, 0x24, 0x02, 0x12, 0x0B, 0xA6, 0x78, 0x69,
    0x12, 0x0B, 0xE9, 0x24, 0x03, 0x12, 0x0B, 0xA6, 0x78, 0x6D, 0x12, 0x0B, 0xE9, 0x24, 0x04, 0x12,
    0x0B, 0xA6, 0x0D, 0xBD, 0x05, 0xD4, 0xC2, 0x0E, 0xC2, 0x06, 0x22, 0x85, 0x08, 0x41, 0x90, 0x30,
    0x24, 0xE0, 0xF5, 0x3D, 0xA3, 0xE0, 0xF5, 0x3E, 0xA3, 0xE0, 0xF5, 0x3F, 0xA3, 0xE0, 0xF5, 0x40,
    0xA3, 0xE0, 0xF5, 0x3C, 0xD2, 0x34, 0xE5, 0x41, 0x12, 0x06, 0xB1, 0x09, 0x31, 0x03, 0x09, 0x35,
    0x04, 0x09, 0x3B, 0x05, 0x09, 0x3E, 0x06, 0x09, 0x41, 0x07, 0x09, 0x4A, 0x08, 0x09, 0x5B, 0x12,
    0x09, 0x73, 0x18, 0x09, 0x89, 0x19, 0x09, 0x5E, 0x1A, 0x09, 0x6A, 0x1B, 0x09, 0xAD, 0x80, 0x09,
    0xB2, 0x81, 0x0A, 0x1D, 0x8F, 0x0A, 0x09, 0x90, 0x0A, 0x1D, 0x91, 0x0A, 0x1D, 0x92, 0x0A, 0x1D,
    0x93, 0x0A, 0x1D, 0x94, 0x0A, 0x1D, 0x98, 0x0A, 0x17, 0x9F, 0x0A, 0x1A, 0xEC, 0x00, 0x00, 0x0A,
    0x38, 0x12, 0x0F, 0x74, 0x22, 0x12, 0x0F, 0x74, 0xD2, 0x03, 0x22, 0xD2, 0x03, 0x22, 0xC2, 0x03,
    0x22, 0xA2, 0x37, 0xE4, 0x33, 0xF5, 0x3C, 0x02, 0x0A, 0x1D, 0xC2, 0x01, 0xC2, 0x02, 0xC2, 0x03,
    0x12, 0x0D, 0x0D, 0x75, 0x1E, 0x70, 0xD2, 0x35, 0x02, 0x0A, 0x1D, 0x02, 0x0A, 0x04, 0x85, 0x40,
    0x4A, 0x85, 0x3C, 0x4B, 0x12, 0x0A, 0xFF, 0x02, 0x0A, 0x1D, 0x85, 0x4A, 0x40, 0x85, 0x4B, 0x3C,
    0x02, 0x0A, 0x1D, 0xE4, 0xF5, 0x22, 0xF5, 0x23, 0x85, 0x40, 0x31, 0x85, 0x3F, 0x30, 0x85, 0x3E,
    0x2F, 0x85, 0x3D, 0x2E, 0x12, 0x0F, 0x46, 0x80, 0x1F, 0x75, 0x22, 0x00, 0x75, 0x23, 0x01, 0x74,
    0xFF, 0xF5, 0x2D, 0xF5, 0x2C, 0xF5, 0x2B, 0xF5, 0x2A, 0x12, 0x0F, 0x46, 0x85, 0x2D, 0x40, 0x85,
    0x2C, 0x3F, 0x85, 0x2B, 0x3E, 0x85, 0x2A, 0x3D, 0xE4, 0xF5, 0x3C, 0x80, 0x70, 0x12, 0x0F, 0x16,
    0x80, 0x6B, 0x85, 0x3D, 0x45, 0x85, 0x3E, 0x46, 0xE5, 0x47, 0xC3, 0x13, 0xFF, 0xE5, 0x45, 0xC3,
    0x9F, 0x50, 0x02, 0x8F, 0x45, 0xE5, 0x48, 0xC3, 0x13, 0xFF, 0xE5, 0x46, 0xC3, 0x9F, 0x50, 0x02,
    0x8F, 0x46, 0xE5, 0x47, 0xC3, 0x13, 0xFF, 0xFD, 0xE5, 0x45, 0x2D, 0xFD, 0xE4, 0x33, 0xFC, 0xE5,
    0x44, 0x12, 0x0F, 0x90, 0x40, 0x05, 0xE5, 0x44, 0x9F, 0xF5, 0x45, 0xE5, 0x48, 0xC3, 0x13, 0xFF,
    0xFD, 0xE5, 0x46, 0x2D, 0xFD, 0xE4, 0x33, 0xFC, 0xE5, 0x43, 0x12, 0x0F, 0x90, 0x40, 0x05, 0xE5,
    0x43, 0x9F, 0xF5, 0x46, 0x12, 0x06, 0xD7, 0x80, 0x14, 0x85, 0x40, 0x48, 0x85, 0x3F, 0x47, 0x85,
    0x3E, 0x46, 0x85, 0x3D, 0x45, 0x80, 0x06, 0x02, 0x06, 0xD7, 0x12, 0x0D, 0x7E, 0x90, 0x30, 0x24,
    0xE5, 0x3D, 0xF0, 0xA3, 0xE5, 0x3E, 0xF0, 0xA3, 0xE5, 0x3F, 0xF0, 0xA3, 0xE5, 0x40, 0xF0, 0xA3,
    0xE5, 0x3C, 0xF0, 0x90, 0x30, 0x23, 0xE4, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
    0xD0, 0x90, 0x3F, 0x0C, 0xE0, 0xF5, 0x32, 0xE5, 0x32, 0x30, 0xE3, 0x74, 0x30, 0x36, 0x66, 0x90,
    0x60, 0x19, 0xE0, 0xF5, 0x0A, 0xA3, 0xE0, 0xF5, 0x0B, 0x90, 0x60, 0x1D, 0xE0, 0xF5, 0x14, 0xA3,
    0xE0, 0xF5, 0x15, 0x90, 0x60, 0x21, 0xE0, 0xF5, 0x0C, 0xA3, 0xE0, 0xF5, 0x0D, 0x90, 0x60, 0x29,
    0xE0, 0xF5, 0x0E, 0xA3, 0xE0, 0xF5, 0x0F, 0x90, 0x60, 0x31, 0xE0, 0xF5, 0x10, 0xA3, 0xE0, 0xF5,
    0x11, 0x90, 0x60, 0x39, 0xE0, 0xF5, 0x12, 0xA3, 0xE0, 0xF5, 0x13, 0x30, 0x01, 0x06, 0x30, 0x33,
    0x03, 0xD3, 0x80, 0x01, 0xC3, 0x92, 0x09, 0x30, 0x02, 0x06, 0x30, 0x33, 0x03, 0xD3, 0x80, 0x01,
    0xC3, 0x92, 0x0A, 0x30, 0x33, 0x0C, 0x30, 0x03, 0x09, 0x20, 0x02, 0x06, 0x20, 0x01, 0x03, 0xD3,
    0x80, 0x01, 0xC3, 0x92, 0x0B, 0x90, 0x30, 0x01, 0xE0, 0x44, 0x40, 0xF0, 0xE0, 0x54, 0xBF, 0xF0,
    0xE5, 0x32, 0x30, 0xE1, 0x14, 0x30, 0x34, 0x11, 0x90, 0x30, 0x22, 0xE0, 0xF5, 0x08, 0xE4, 0xF0,
    0x30, 0x00, 0x03, 0xD3, 0x80, 0x01, 0xC3, 0x92, 0x08, 0xE5, 0x32, 0x30, 0xE5, 0x12, 0x90, 0x56,
    0xA1, 0xE0, 0xF5, 0x09, 0x30, 0x31, 0x09, 0x30, 0x05, 0x03, 0xD3, 0x80, 0x01, 0xC3, 0x92, 0x0D,
    0x90, 0x3F, 0x0C, 0xE5, 0x32, 0xF0, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x90,
    0x0E, 0x7E, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3, 0x90, 0x0E, 0x7C, 0x74, 0x01, 0x93,
    0x9F, 0xFF, 0xE4, 0x93, 0x9E, 0xFE, 0xE4, 0x8F, 0x3B, 0x8E, 0x3A, 0xF5, 0x39, 0xF5, 0x38, 0xAB,
    0x3B, 0xAA, 0x3A, 0xA9, 0x39, 0xA8, 0x38, 0xAF, 0x4B, 0xFC, 0xFD, 0xFE, 0x12, 0x05, 0x28, 0x12,
    0x0D, 0xE1, 0xE4, 0x7B, 0xFF, 0xFA, 0xF9, 0xF8, 0x12, 0x05, 0xB3, 0x12, 0x0D, 0xE1, 0x90, 0x0E,
    0x69, 0xE4, 0x12, 0x0D, 0xF6, 0x12, 0x0D, 0xE1, 0xE4, 0x85, 0x4A, 0x37, 0xF5, 0x36, 0xF5, 0x35,
    0xF5, 0x34, 0xAF, 0x37, 0xAE, 0x36, 0xAD, 0x35, 0xAC, 0x34, 0xA3, 0x12, 0x0D, 0xF6, 0x8F, 0x37,
    0x8E, 0x36, 0x8D, 0x35, 0x8C, 0x34, 0xE5, 0x3B, 0x45, 0x37, 0xF5, 0x3B, 0xE5, 0x3A, 0x45, 0x36,
    0xF5, 0x3A, 0xE5, 0x39, 0x45, 0x35, 0xF5, 0x39, 0xE5, 0x38, 0x45, 0x34, 0xF5, 0x38, 0xE4, 0xF5,
    0x22, 0xF5, 0x23, 0x85, 0x3B, 0x31, 0x85, 0x3A, 0x30, 0x85, 0x39, 0x2F, 0x85, 0x38, 0x2E, 0x02,
    0x0F, 0x46, 0xE0, 0xA3, 0xE0, 0x75, 0xF0, 0x02, 0xA4, 0xFF, 0xAE, 0xF0, 0xC3, 0x08, 0xE6, 0x9F,
    0xF6, 0x18, 0xE6, 0x9E, 0xF6, 0x22, 0xFF, 0xE5, 0xF0, 0x34, 0x60, 0x8F, 0x82, 0xF5, 0x83, 0xEC,
    0xF0, 0x22, 0x78, 0x52, 0x7E, 0x00, 0xE6, 0xFC, 0x08, 0xE6, 0xFD, 0x02, 0x04, 0xC1, 0xE4, 0xFC,
    0xFD, 0x12, 0x06, 0x99, 0x78, 0x5C, 0xE6, 0xC3, 0x13, 0xFE, 0x08, 0xE6, 0x13, 0x22, 0x78, 0x52,
    0xE6, 0xFE, 0x08, 0xE6, 0xFF, 0xE4, 0xFC, 0xFD, 0x22, 0xE7, 0xC4, 0xF8, 0x54, 0xF0, 0xC8, 0x68,
    0xF7, 0x09, 0xE7, 0xC4, 0x54, 0x0F, 0x48, 0xF7, 0x22, 0xE6, 0xFC, 0xED, 0x75, 0xF0, 0x04, 0xA4,
    0x22, 0x12, 0x06, 0x7C, 0x8F, 0x48, 0x8E, 0x47, 0x8D, 0x46, 0x8C, 0x45, 0x22, 0xE0, 0xFE, 0xA3,
    0xE0, 0xFD, 0xEE, 0xF6, 0xED, 0x08, 0xF6, 0x22, 0x13, 0xFF, 0xC3, 0xE6, 0x9F, 0xFF, 0x18, 0xE6,
    0x9E, 0xFE, 0x22, 0xE6, 0xC3, 0x13, 0xF7, 0x08, 0xE6, 0x13, 0x09, 0xF7, 0x22, 0xAD, 0x39, 0xAC,
    0x38, 0xFA, 0xF9, 0xF8, 0x12, 0x05, 0x28, 0x8F, 0x3B, 0x8E, 0x3A, 0x8D, 0x39, 0x8C, 0x38, 0xAB,
    0x37, 0xAA, 0x36, 0xA9, 0x35, 0xA8, 0x34, 0x22, 0x93, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x12, 0x05,
    0x28, 0x8F, 0x37, 0x8E, 0x36, 0x8D, 0x35, 0x8C, 0x34, 0x22, 0x78, 0x84, 0xE6, 0xFE, 0x08, 0xE6,
    0xFF, 0xE4, 0x8F, 0x37, 0x8E, 0x36, 0xF5, 0x35, 0xF5, 0x34, 0x22, 0x90, 0x0E, 0x8C, 0xE4, 0x93,
    0x25, 0xE0, 0x24, 0x0A, 0xF8, 0xE6, 0xFE, 0x08, 0xE6, 0xFF, 0x22, 0xE6, 0xFE, 0x08, 0xE6, 0xFF,
    0xE4, 0x8F, 0x3B, 0x8E, 0x3A, 0xF5, 0x39, 0xF5, 0x38, 0x22, 0x78, 0x4E, 0xE6, 0xFE, 0x08, 0xE6,
    0xFF, 0x22, 0xEF, 0x25, 0xE0, 0x24, 0x4E, 0xF8, 0xE6, 0xFC, 0x08, 0xE6, 0xFD, 0x22, 0x78, 0x89,
    0xEF, 0x26, 0xF6, 0x18, 0xE4, 0x36, 0xF6, 0x22, 0x75, 0x89, 0x03, 0x75, 0xA8, 0x01, 0x75, 0xB8,
    0x04, 0x75, 0x34, 0xFF, 0x75, 0x35, 0x0E, 0x75, 0x36, 0x15, 0x75, 0x37, 0x0D, 0x12, 0x0E, 0x9A,
    0x12, 0x00, 0x09, 0x12, 0x0F, 0x16, 0x12, 0x00, 0x06, 0xD2, 0x00, 0xD2, 0x34, 0xD2, 0xAF, 0x75,
    0x34, 0xFF, 0x75, 0x35, 0x0E, 0x75, 0x36, 0x49, 0x75, 0x37, 0x03, 0x12, 0x0E, 0x9A, 0x30, 0x08,
    0x09, 0xC2, 0x34, 0x12, 0x08, 0xCB, 0xC2, 0x08, 0xD2, 0x34, 0x30, 0x0B, 0x09, 0xC2, 0x36, 0x12,
    0x02, 0x6C, 0xC2, 0x0B, 0xD2, 0x36, 0x30, 0x09, 0x09, 0xC2, 0x36, 0x12, 0x00, 0x0E, 0xC2, 0x09,
    0xD2, 0x36, 0x30, 0x0E, 0x03, 0x12, 0x06, 0xD7, 0x30, 0x35, 0xD3, 0x90, 0x30, 0x29, 0xE5, 0x1E,
    0xF0, 0xB4, 0x10, 0x05, 0x90, 0x30, 0x23, 0xE4, 0xF0, 0xC2, 0x35, 0x80, 0xC1, 0xE4, 0xF5, 0x4B,
    0x90, 0x0E, 0x7A, 0x93, 0xFF, 0xE4, 0x8F, 0x37, 0xF5, 0x36, 0xF5, 0x35, 0xF5, 0x34, 0xAF, 0x37,
    0xAE, 0x36, 0xAD, 0x35, 0xAC, 0x34, 0x90, 0x0E, 0x6A, 0x12, 0x0D, 0xF6, 0x8F, 0x37, 0x8E, 0x36,
    0x8D, 0x35, 0x8C, 0x34, 0x90, 0x0E, 0x72, 0x12, 0x06, 0x7C, 0xEF, 0x45, 0x37, 0xF5, 0x37, 0xEE,
    0x45, 0x36, 0xF5, 0x36, 0xED, 0x45, 0x35, 0xF5, 0x35, 0xEC, 0x45, 0x34, 0xF5, 0x34, 0xE4, 0xF5,
    0x22, 0xF5, 0x23, 0x85, 0x37, 0x31, 0x85, 0x36, 0x30, 0x85, 0x35, 0x2F, 0x85, 0x34, 0x2E, 0x12,
    0x0F, 0x46, 0xE4, 0xF5, 0x22, 0xF5, 0x23, 0x90, 0x0E, 0x72, 0x12, 0x0D, 0xEA, 0x12, 0x0F, 0x46,
    0xE4, 0xF5, 0x22, 0xF5, 0x23, 0x90, 0x0E, 0x6E, 0x12, 0x0D, 0xEA, 0x02, 0x0F, 0x46, 0xE5, 0x40,
    0x24, 0xF2, 0xF5, 0x37, 0xE5, 0x3F, 0x34, 0x43, 0xF5, 0x36, 0xE5, 0x3E, 0x34, 0xA2, 0xF5, 0x35,
    0xE5, 0x3D, 0x34, 0x28, 0xF5, 0x34, 0xE5, 0x37, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x78, 0x18, 0x12,
    0x06, 0x69, 0x8F, 0x40, 0x8E, 0x3F, 0x8D, 0x3E, 0x8C, 0x3D, 0xE5, 0x37, 0x54, 0xA0, 0xFF, 0xE5,
    0x36, 0xFE, 0xE4, 0xFD, 0xFC, 0x78, 0x07, 0x12, 0x06, 0x56, 0x78, 0x10, 0x12, 0x0F, 0x9A, 0xE4,
    0xFF, 0xFE, 0xE5, 0x35, 0xFD, 0xE4, 0xFC, 0x78, 0x0E, 0x12, 0x06, 0x56, 0x12, 0x0F, 0x9D, 0xE4,
    0xFF, 0xFE, 0xFD, 0xE5, 0x34, 0xFC, 0x78, 0x18, 0x12, 0x06, 0x56, 0x78, 0x08, 0x12, 0x0F, 0x9A,
    0x22, 0x8F, 0x3B, 0x8E, 0x3A, 0x8D, 0x39, 0x8C, 0x38, 0x22, 0x12, 0x06, 0x7C, 0x8F, 0x31, 0x8E,
    0x30, 0x8D, 0x2F, 0x8C, 0x2E, 0x22, 0x93, 0xF9, 0xF8, 0x02, 0x06, 0x69, 0x00, 0x00, 0x00, 0x00,
    0x12, 0x01, 0x17, 0x08, 0x31, 0x15, 0x53, 0x54, 0x44, 0x20, 0x20, 0x20, 0x20, 0x20, 0x13, 0x01,
    0x10, 0x01, 0x56, 0x40, 0x1A, 0x30, 0x29, 0x7E, 0x00, 0x30, 0x04, 0x20, 0xDF, 0x30, 0x05, 0x40,
    0xBF, 0x50, 0x03, 0x00, 0xFD, 0x50, 0x27, 0x01, 0xFE, 0x60, 0x00, 0x11, 0x00, 0x3F, 0x05, 0x30,
    0x00, 0x3F, 0x06, 0x22, 0x00, 0x3F, 0x01, 0x2A, 0x00, 0x3F, 0x02, 0x00, 0x00, 0x36, 0x06, 0x07,
    0x00, 0x3F, 0x0B, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x40, 0xBF, 0x30, 0x01, 0x00,
    0xBF, 0x30, 0x29, 0x70, 0x00, 0x3A, 0x00, 0x00, 0xFF, 0x3A, 0x00, 0x00, 0xFF, 0x36, 0x03, 0x36,
    0x02, 0x41, 0x44, 0x58, 0x20, 0x18, 0x10, 0x0A, 0x04, 0x04, 0x00, 0x03, 0xFF, 0x64, 0x00, 0x00,
    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x06, 0x06, 0x00, 0x03, 0x51, 0x00, 0x7A,
    0x50, 0x3C, 0x28, 0x1E, 0x10, 0x10, 0x50, 0x2D, 0x28, 0x16, 0x10, 0x10, 0x02, 0x00, 0x10, 0x0C,
    0x10, 0x04, 0x0C, 0x6E, 0x06, 0x05, 0x00, 0xA5, 0x5A, 0x00, 0xAE, 0x35, 0xAF, 0x36, 0xE4, 0xFD,
    0xED, 0xC3, 0x95, 0x37, 0x50, 0x33, 0x12, 0x0F, 0xE2, 0xE4, 0x93, 0xF5, 0x38, 0x74, 0x01, 0x93,
    0xF5, 0x39, 0x45, 0x38, 0x60, 0x23, 0x85, 0x39, 0x82, 0x85, 0x38, 0x83, 0xE0, 0xFC, 0x12, 0x0F,
    0xE2, 0x74, 0x03, 0x93, 0x52, 0x04, 0x12, 0x0F, 0xE2, 0x74, 0x02, 0x93, 0x42, 0x04, 0x85, 0x39,
    0x82, 0x85, 0x38, 0x83, 0xEC, 0xF0, 0x0D, 0x80, 0xC7, 0x22, 0x78, 0xBE, 0xE6, 0xD3, 0x08, 0xFF,
    0xE6, 0x64, 0x80, 0xF8, 0xEF, 0x64, 0x80, 0x98, 0x22, 0x93, 0xFF, 0x7E, 0x00, 0xE6, 0xFC, 0x08,
    0xE6, 0xFD, 0x12, 0x04, 0xC1, 0x78, 0xC1, 0xE6, 0xFC, 0x08, 0xE6, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE,
    0x9C, 0x22, 0x78, 0xBD, 0xD3, 0xE6, 0x64, 0x80, 0x94, 0x80, 0x22, 0x25, 0xE0, 0x24, 0x0A, 0xF8,
    0xE6, 0xFE, 0x08, 0xE6, 0xFF, 0x22, 0xE5, 0x3C, 0xD3, 0x94, 0x00, 0x40, 0x0B, 0x90, 0x0E, 0x88,
    0x12, 0x0B, 0xF1, 0x90, 0x0E, 0x86, 0x80, 0x09, 0x90, 0x0E, 0x82, 0x12, 0x0B, 0xF1, 0x90, 0x0E,
    0x80, 0xE4, 0x93, 0xF5, 0x44, 0xA3, 0xE4, 0x93, 0xF5, 0x43, 0xD2, 0x06, 0x30, 0x06, 0x03, 0xD3,
    0x80, 0x01, 0xC3, 0x92, 0x0E, 0x22, 0xA2, 0xAF, 0x92, 0x32, 0xC2, 0xAF, 0xE5, 0x23, 0x45, 0x22,
    0x90, 0x0E, 0x5D, 0x60, 0x0E, 0x12, 0x0F, 0xCB, 0xE0, 0xF5, 0x2C, 0x12, 0x0F, 0xC8, 0xE0, 0xF5,
    0x2D, 0x80, 0x0C, 0x12, 0x0F, 0xCB, 0xE5, 0x30, 0xF0, 0x12, 0x0F, 0xC8, 0xE5, 0x31, 0xF0, 0xA2,
    0x32, 0x92, 0xAF, 0x22, 0xD2, 0x01, 0xC2, 0x02, 0xE4, 0xF5, 0x1F, 0xF5, 0x1E, 0xD2, 0x35, 0xD2,
    0x33, 0xD2, 0x36, 0xD2, 0x01, 0xC2, 0x02, 0xF5, 0x1F, 0xF5, 0x1E, 0xD2, 0x35, 0xD2, 0x33, 0x22,
    0xFB, 0xD3, 0xED, 0x9B, 0x74, 0x80, 0xF8, 0x6C, 0x98, 0x22, 0x12, 0x06, 0x69, 0xE5, 0x40, 0x2F,
    0xF5, 0x40, 0xE5, 0x3F, 0x3E, 0xF5, 0x3F, 0xE5, 0x3E, 0x3D, 0xF5, 0x3E, 0xE5, 0x3D, 0x3C, 0xF5,
    0x3D, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0x90, 0x3F, 0x0D, 0xE0, 0xF5, 0x33, 0xE5, 0x33,
    0xF0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x90, 0x0E, 0x5F, 0xE4, 0x93, 0xFE, 0x74, 0x01,
    0x93, 0xF5, 0x82, 0x8E, 0x83, 0x22, 0x78, 0x7F, 0xE4, 0xF6, 0xD8, 0xFD, 0x75, 0x81, 0xCD, 0x02,
    0x0C, 0x98, 0x8F, 0x82, 0x8E, 0x83, 0x75, 0xF0, 0x04, 0xED, 0x02, 0x06, 0xA5,
};

